///\file light.hh
///\author Allan BLANCHARD
///\brief contient la spécification de la classe Light
#ifndef _LIGHT
#define _LIGHT

#include <GL/gl.h>

///\class Light
///\brief permet de créer une instance de la lumière N et de l'appliquer
///\param N : numero de la lumière
template<int N>
class Light{
private :
  float pos[4]; ///< position de la lumière
  float amb[4]; ///< lumière ambiante
  float dif[4]; ///< lumière diffuse
  float spe[4]; ///< lumière speculaire

public :
  ///\brief
  ///Constructeur par défaut : lumière ponctuel en 0, 0, 0
  Light(){
    pos[0] = 0;
    pos[1] = 0;
    pos[2] = 0;
    pos[3] = 0;
  }

  ///\brief
  ///Constucteur
  ///\param x position en x
  ///\param y position en y
  ///\param z position en z
  ///\param t type de lumière (0 ponctuel, 1 à l'infini)
  Light(float x, float y, float z, float t){
    pos[0] = x;
    pos[1] = y;
    pos[2] = z;
    pos[3] = t;
  }

  ///\brief
  ///Destructeur
  ///\warning détruire la lumière entraîne sa désactivation
  ~Light(){ deactivate(); }
  
  ///\brief
  ///replacement de la lumière
  ///\param x position en x
  ///\param y position en y
  ///\param z position en z
  ///\param t type de lumière (0 ponctuel, 1 à l'infini)
  void placeAt(float x, float y, float z, float t){
    pos[0] = x;
    pos[1] = y;
    pos[2] = z;
    pos[3] = t;
  }

  ///\brief
  ///Changement de la couleur ambiante de la lumière
  ///\param r composante rouge
  ///\param g composante green
  ///\param b composante blue
  void setAmb(float r, float g, float b){
    amb[0] = r;
    amb[1] = g;
    amb[2] = b;
    amb[3] = 1.;
  }

  ///\brief
  ///Changement de la couleur speculaire de la lumière
  ///\param r composante rouge
  ///\param g composante green
  ///\param b composante blue
  void setSpe(float r, float g, float b){
    spe[0] = r;
    spe[1] = g;
    spe[2] = b;
    spe[3] = 1.;
  }

  ///\brief
  ///Changement de la couleur diffuse de la lumière
  ///\param r composante rouge
  ///\param g composante green
  ///\param b composante blue
  void setDif(float r, float g, float b){
    dif[0] = r;
    dif[1] = g;
    dif[2] = b;
    dif[3] = 1.;
  }
  
  ///\brief
  ///activation de la lumière
  void activate();
  
  ///\brief
  ///desactivation de la lumière
  void deactivate();
};

#endif
